import axios from 'axios'
import { message } from 'ant-design-vue'
import base from './baseUrl'
// import store from "../../store/index";

// 环境的切换
if (process.env.NODE_ENV == 'development') {
  console.log("env_dev")
  axios.defaults.baseURL = base.BASEURL
} else if (process.env.NODE_ENV == 'test') {
  console.log("env_test")
  // axios.defaults.baseURL = 'https://cnodejs.org/api/v1'
  axios.defaults.baseURL = base.BASEURL_TEST
} else if (process.env.NODE_ENV == 'production') {
  console.log("env_prod")
  axios.defaults.baseURL = base.BASEURL_PROD
}

// 设置请求超时时间
// axios.defaults.timeout = 10000

// 设置post请求头
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'

// 请求拦截
axios.interceptors.request.use(
  (config) => {
    // store.state.loadding = true; //在请求发出之前进行一些操作
    // 在发送请求之前做些什么 验证token之类的
    // Loading.service(true);
    if (sessionStorage.getItem('ToKen') && config.url != '/captchaImage') {
      config.headers['Authorization'] =
        'Bearer ' + sessionStorage.getItem('ToKen')
    }
    return config
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.error(error)
  }
)

// 响应拦截
axios.interceptors.response.use(
  (res) => {
    // store.state.loadding = false; //在这里对返回的数据进行处理
    // 对响应数据做点什么
    if (res.data.code === 401) {
      // this.$confirm('确认删除文件？', {
      //   type: 'error',
      // })
      //   .then(() => {
      //     console.log('确认操作')
      //   })
      //   .catch(() => {
      //     console.log('取消操作')
      //   })
      // Modal.error({
      //   title: '系统提示',
      //   content: `登录状态已过期，您可以继续留在该页面，或者重新登录`,
      // })
      message.error('登录状态已过期，您可以继续留在该页面，或者重新登录')
    }
    // if (res.data.code != 200) {
    //   this.$error({
    //     title: '系统提示',
    //     content: `登录状态已过期，您可以继续留在该页面，或者重新登录`,
    //   })
    //   // message.error(res.data.msg)
    // }
    return res
  },
  (error) => {
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

// 封装get方法和post方法

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, {
        params: params,
      })
      .then((res) => {
        resolve(res.data)
        //  message({message: '请求成功', type: 'success'});
      })
      .catch((err) => {
        reject(err)
        // message({ message: "加载失败", type: "error" });
        // message.error(err)
      })
  })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .post(url, params)
      .then((res) => {
        resolve(res.data)
        // Loading.service(true).close();
        //  message({message: '请求成功', type: 'success'});
      })
      .catch((err) => {
        reject(err.data)
        // Loading.service(true).close();
        // message({ message: "加载失败", type: "error" });
        message.error('加载失败')
      })
  })
}

/**
 * put
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
 export function put(url, params) {
  return new Promise((resolve, reject) => {
    axios
      .put(url, params)
      .then((res) => {
        resolve(res.data)
        // Loading.service(true).close();
        //  message({message: '请求成功', type: 'success'});
      })
      .catch((err) => {
        reject(err.data)
        // Loading.service(true).close();
        // message({ message: "加载失败", type: "error" });
        message.error('加载失败')
      })
  })
}

/**
 * delete方法，对应delete请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function del(url, data) {
  return new Promise((resolve, reject) => {
    axios
      .delete(url, {
        data,
      })
      .then((res) => {
        resolve(res.data)
        // Loading.service(true).close();
        //  message({message: '请求成功', type: 'success'});
      })
      .catch((err) => {
        reject(err.data)
        // Loading.service(true).close();
        // message({ message: "加载失败", type: "error" });
        message.error('加载失败')
      })
  })
}
